<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>原型链继承</title>
</head>
<body>
    <h1>原型链继承</h1>
   
</body>
<script type="text/javascript">
    
    /*
    function Cat(){

    }

    Cat.prototype.name = 'Tom';
    Cat.prototype.age = '18';

    const cat = new Cat()
    console.log(cat)
    */

    function Parent () {
        this.name = 'kevin';
        this.list = ['a','b']
    }
    
    Parent.prototype.getName = function () {
        console.log(this.name);
    }
    
    function Child () {
    
    }
    Child.prototype = new Parent();
    
    var child1 = new Child();
    var child2 = new Child();
    child1.name = 'test'
    
    child1.list.push('c')
    console.log(child1)
    console.log(child2)
    console.log('aa',Parent.prototype)
    console.log('aa',Child.prototype)



    // 特点：
    // 非常纯粹的继承关系，实例是子类的实例，也是父类的实例
    // 父类新增原型方法/原型属性，子类都能访问到
    // 简单，易于实现
    
    // 缺点：
    // 要想为子类新增属性和方法，必须要在new Parent()这样的语句之后执行，不能放到构造器中
    // 无法实现多继承
    // 来自原型对象的引用属性是所有实例共享的（详细请看附录代码： 示例1）
    // 创建子类实例时，无法向父类构造函数传参

</script>
</html>